package cn.com.blueInfo.bpm.number.request;

import cn.com.blueInfo.bpm.common.request.BaseDTO;
import cn.com.blueInfo.bpm.common.request.BaseQueryDTO;
import cn.com.blueInfo.bpm.number.enums.NumberRuleComponentType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotNull;

/**
 * 编号规则组成配置表 接收参数机校验
 * @author suxch
 * @since 2025-08-24 01:39:05
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "编号规则组成配置 接收参数及校验")
public class NumberRuleComponentDTO extends BaseDTO {

    /** 规则主表ID */
    @NotNull(message = "规则主表ID 不能为空")
    @Schema(description = "规则主表ID")
    private Long ruleId;
    /** 组成部分类型：FIXED-固定字符，DATE-日期，SERIAL-流水号，ORG_CODE-组织编码，USER_CODE-员工编码 */
    @NotNull(message = "组成部分类型 不能为空")
    @Schema(description = "组成部分类型：FIXED-固定字符，DATE-日期，SERIAL-流水号，ORG_CODE-组织编码，USER_CODE-员工编码")
    private NumberRuleComponentType componentType;
    /** 组成内容（根据类型动态填写） */
    @Schema(description = "组成内容（根据类型动态填写）")
    private String componentContent;
    /** 该组成部分的固定长度 */
    @Schema(description = "该组成部分的固定长度")
    private Byte length;

    /**
     * 编号规则组成配置 接收分页查询参数
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "编号规则组成配置 接收分页查询参数")
    public static class QueryDTO extends BaseQueryDTO {

        /** 规则主表ID */
        @Schema(description = "规则主表ID")
        private Long ruleId;
        /** 组成部分类型：FIXED-固定字符，DATE-日期，SERIAL-流水号，ORG_CODE-组织编码，USER_CODE-员工编码 */
        @Schema(description = "组成部分类型：FIXED-固定字符，DATE-日期，SERIAL-流水号，ORG_CODE-组织编码，USER_CODE-员工编码")
        private NumberRuleComponentType componentType;
        /** 组成内容（根据类型动态填写） */
        @Schema(description = "组成内容（根据类型动态填写）")
        private String componentContent;
        /** 该组成部分的固定长度 */
        @Schema(description = "该组成部分的固定长度")
        private Byte length;

    }

    /**
     * 编号规则组成配置 接收部分更新参数及校验
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "编号规则组成配置 接收部分更新参数及校验")
    public static class UpdatePartialDTO extends BaseDTO {

        /** 组成内容（根据类型动态填写） */
        @Schema(description = "组成内容（根据类型动态填写）")
        private String componentContent;
        /** 该组成部分的固定长度 */
        @Schema(description = "该组成部分的固定长度")
        private Byte length;

    }

}